// 对项目的axios进行二次封装
import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css' //引入其样式文件
import {createUserTempId} from '@/utils/userAbout'


// 创建axios的实例化对象  
const request = axios.create({
  baseURL: '/api',//基础路径
  timeout: 10000,//超时时间
});

// 添加请求拦截器
request.interceptors.request.use(function (config) {
  // 请求发送成功执行的回调函数
  // config这是包含这次请求的所有信息所组成的一个对象(请求报文)
  // 开启进度条
  Nprogress.start()
  // 之后可能会在这里加一些公共参数
  // 添加临时标识
  config.headers.userTempId = createUserTempId()
  return config;
});

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 响应成功执行的回调函数
  // response这是响应的所有的信息所组成的一个对象(响应报文)
  // 统一处理响应的结果 方便组件使用数据
  // 关闭进度条
  Nprogress.done()
  return response.data;
}, function (error) {
  // 响应失败执行的回调函数
  // 统一处理错误
  // 拿到错误状态码 根据状态码做出不同提示
  if (error.response.status == 401) {
    alert('未授权')
  } else if (error.response.status == 403) {
    alert('禁止访问')
  } else if (error.response.status == 404) {
    alert('错误访问')
  } else if (error.response.status == 500) {
    alert('服务器出错')
  }
  // 关闭进度条
  Nprogress.done()
  // 不用再组件中自己处理错误 
  return new Promise(() => { }); //返回一个pending的promise
});

export default request